#include "FournisseurDescription.hpp"

#include "DescriptionFichier.hpp"

#include <QtCore/QStringList>

#include <iostream>

using namespace std;

DescriptionFichier DescAgence( QString::fromUtf8( ":/agency" ) );

DescriptionFichier DescSyndicat( QString::fromUtf8( ":/syndicate" ) );

DescriptionFichier DescObjets( QString::fromUtf8( ":/items" ) );

DescriptionFichier DescGuerre( QString::fromUtf8( ":/warlog" ) );

DescriptionFichier DescMonstres( QString::fromUtf8( ":/monsters" ) );

DescriptionFichier DescPortails( QString::fromUtf8( ":/portails" ) );

DescriptionFichier DescContrats( QString::fromUtf8( ":/contracts" ) );

DescriptionFichier DescInventaire( QString::fromUtf8( ":/inventory" ) );

DescriptionFichier DescVilles( QString::fromUtf8( ":/cities" ) );

const DescriptionFichier* obtenirDescription( const QString& nom )
{
  QStringList ListeFichiers;

  ListeFichiers << "agency" << "syndicate" << "items" << "warlog"
		<< "monsters" << "portails" << "contracts"
		<< "inventory" << "cities" ;

  int loc( ListeFichiers.indexOf( nom ) );

  if ( loc < 0 )
    {
      cerr << "Impossible de trouver la description voulue : '"
	   << nom . toUtf8() . constData() << "'" << endl;
      return 0;
    }

  DescriptionFichier* choisi = 0;

  switch ( loc )
    {
    case 0:
      choisi = &DescAgence;
      break;
    case 1:
      choisi = &DescSyndicat;
      break;
    case 2:
      choisi = &DescObjets;
      break;
    case 3:
      choisi = &DescGuerre;
      break;
    case 4:
      choisi = &DescMonstres;
      break;
    case 5:
      choisi = &DescPortails;
      break;
    case 6:
      choisi = &DescContrats;
      break;
    case 7:
      choisi = &DescInventaire;
      break;
    case 8:
      choisi = &DescVilles;
      break;
    default:
      cerr << "Impossible de localiser l'objet correspondant" << endl;
      return 0;
    }

  if ( ! choisi -> initialisationEffectuee() )
    {
      if ( choisi -> chargerDescription() != 0 )
	{
	  cerr << "Erreur lors de la récupération des données" << endl;
	  return 0;
	}
    }

  return choisi;
}
